<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <script>
    // 数据类型的检测

    // 1. 使用typeof关键字
    // typeof只能检测基本数据类型
    // 所有的复杂类型，检测出来都是object。无法区分数组或者对象
    // null用typeof检测也是object
    // let str = "hello";
    // console.log(typeof str); // string
    // let num = 3;
    // console.log(typeof num); // number
    // let bool = true;
    // console.log(typeof bool); // boolean
    // let udf = undefined;
    // console.log(typeof udf); // undefined
    // let nl = null;
    // console.log(typeof nl); // object
    // let arr = [1,2,3];
    // console.log(typeof arr); // object
    // let obj = {a:3};
    // console.log(typeof obj); // object




    // 2. instanceof
    // instanceof表示要检测的变量是否属于某一个构造函数的实例，返回true或者false
    // 任意的复杂类型，用instanseof检测都是Object
    // let arr2 = [1,2];
    // console.log(arr2 instanceof Array); // true
    // // console.log(arr2 instanceof Object); // true

    // let obj2 = {};
    // console.log(obj2 instanceof Object); // true
    // console.log(new Function() instanceof Function); // true

    // let date = new Date();
    // console.log(date);
    // console.log(date instanceof Date); // true




    // 3. constructor
    // constructor是变量的属性，用来获取一个对象的构造函数
    // console.log([1,2,3].constructor === Array);
    // console.log({a:3}.constructor === Object);
    // console.log(new Number(1).constructor === Number);




    // 4. Object.prototype.toString.call()
    // 比较通用的方式
    // let str = "";
    // console.log(Object.prototype.toString.call(str)); // [object String]
    // console.log(Object.prototype.toString.call(2)); // [object String]
    // console.log(Object.prototype.toString.call(true)); // [object String]
    // console.log(Object.prototype.toString.call(undefined)); // [object String]
    // console.log(Object.prototype.toString.call(null)); // [object String]
    // console.log(Object.prototype.toString.call(Symbol("a"))); // [object String]
    // console.log(Object.prototype.toString.call(123n)); // [object String]
    // console.log(Object.prototype.toString.call([1,2])); // [object String]
    // console.log(Object.prototype.toString.call({a:1})); // [object String]
    // console.log(Object.prototype.toString.call(function(){})); // [object String]
    
    
    
  </script>
</body>
</html>